﻿using Castle.MonoRail.Framework;
using System.Collections.Generic;
using System;
using CoopSaude.SCEMReference;
using CoopSaude.Dao;
using CoopSaude.Dto;
using System.Collections;

namespace CoopSaude.Controllers
{
    [ControllerDetails(Area = "Prontuario")]    
    [DefaultAction("Index")]
    public class DiagnosticoController : BaseController
    {
        #region Actions

        public void Index()
        {
            try
            {
                string nomePaciente = Params["nome_paciente"];
                List<PacienteDto> lsPacientes;

                string paciente = Params["paciente"];
                if (paciente != null && !String.IsNullOrEmpty(paciente))
                {
                    lsPacientes = PacienteDto.BuscarPorNome(paciente);
                    PropertyBag["pacientes"] = lsPacientes;
                    Session["listaPacientes"] = lsPacientes;
                }
                else
                {
                    lsPacientes = PacienteDto.BuscarPorNome("");
                }

                List<MedicoDTO> medicos = MedicoDTO.ListarMedicos();
                PropertyBag["medicos"] = medicos;
                Session["listaMedicos"] = medicos;
            }
            catch (Exception e)
            {
                Flash["erro"] = "Ocorreu um erro ao acessar o serviço";
            }
            this.MenuUtilizado = "prontuario";
            this.SecaoUtilizada = "diagnostico";
            this.AcaoUtilizada = "index";
        }

        /*
         * Busca um paciente baseado em seu nome através do webservice adequado
         * Se o nome for vazio, retorna todos os pacientes com a ordenação do webservice
         * Cria uma lista destes pacientes para ser exibida na view
         */
        public void Buscar()
        {
            try
            {
                List<PacienteDto> lsPacientes;

                string paciente = Params["search_field"];
                if (String.IsNullOrEmpty(paciente))
                {
                    paciente = "";
                }
                
                lsPacientes = PacienteDto.BuscarPorNome(paciente);
                PropertyBag["pacientes"] = lsPacientes;
                // Session["listaPacientes"] = lsPacientes;

                List<MedicoDTO> medicos = MedicoDTO.ListarMedicos();
                PropertyBag["medicos"] = medicos;
                // Session["listaMedicos"] = medicos;
            }
            catch (Exception e)
            {
                Flash["erro"] = "Ocorreu um erro ao acessar o serviço";
            }
            this.MenuUtilizado = "prontuario";
            this.SecaoUtilizada = "diagnostico";
            this.AcaoUtilizada = "buscar";
        }


        public void Listar()
        {
            string paciente = Params["search_field"];
            Diagnostico.SerializeDiagnostico[] diagnosticos = null;
            if (String.IsNullOrEmpty(paciente))
            {
                RenderView("buscar");
            }
            else
            {
                var paciente_data = PacienteDto.BuscarPorNome(paciente);
                if (paciente_data != null && paciente_data.Count > 0)
                    diagnosticos = DiagnosticoDAO.listarDiagnosticos(Convert.ToString(paciente_data[0].Id));
            }

            PropertyBag["paciente"] = paciente;

            PropertyBag["diagnosticos"] = diagnosticos;
            


            this.MenuUtilizado = "prontuario";
            this.SecaoUtilizada = "diagnostico";
            this.AcaoUtilizada = "listar";
        }

        public void Adicionar()
        {
            String paciente = Params["paciente"];
            String medico = Params["medico"];


            List<MedicoDTO> medicos;
            List<PacienteDto> pacientes;

            if (Session["listaPacientes"] == null)
            {
                pacientes = PacienteDto.BuscarPorNome("");
                Session["listaPacientes"] = pacientes;
            }
            else
            {
                pacientes = PacienteDto.BuscarPorNome("");
            }

            PropertyBag["listaPacientes"] = pacientes;
            if (Session["listaMedicos"] == null)
            {
                medicos = MedicoDTO.ListarMedicos();
                Session["listaMedicos"] = medicos;
            }
            else
            {
                medicos = (List<MedicoDTO>) Session["listaMedicos"];
            }
            PropertyBag["listaMedicos"] = medicos;

            this.MenuUtilizado = "prontuario";
            this.SecaoUtilizada = "diagnostico";
            this.AcaoUtilizada = "adicionar";
        }

        public void Criar()
        {
            

            try
            {
                /*
                String nome_paciente = Params["diagnostico_idPaciente"];
                String nome_medico = Params["diagnostico_idMedico"];

                var idsPaciente = PacienteDto.BuscarPorNome(nome_paciente);
                String idPaciente = Convert.ToString(idsPaciente[0].Id);
                String idMedico = "";
                var idsMedico = MedicoDTO.ListarMedicos();
                foreach (var medico in idsMedico)
                {
                    if (medico.Nome.Equals(nome_medico))
                    {
                        idMedico = Convert.ToString(medico.Id);
                    }
                }
                 */
                
                if (Params["diagnostico_sintomas"].ToString().Equals("") ||
                    Params["diagnostico_queixas"].ToString().Equals("") ||
                    Params["diagnostico_tratamento"].ToString().Equals("") ||
                    Params["diagnostico_idMedico"].ToString().Equals("") ||
                    Params["diagnostico_idPaciente"].ToString().Equals(""))
                    //idPaciente.Equals("") || idMedico.Equals(""))
                {

                    Flash["erro"] = "Voce precisa preencher todos os campos.";
                    RenderView("adicionar");
                }
                else
                {   
                    Diagnostico.SerializeDiagnostico diagnostico = DiagnosticoDAO.adicionarDiagnostico(Convert.ToInt32(Params["diagnostico_idPaciente"]), Params["diagnostico_idMedico"],
                                                Params["diagnostico_sintomas"], Params["diagnostico_queixas"], Params["diagnostico_tratamento"]);
                }
            }
            catch (Exception ex)
            {

                Flash["error"] = "Ocorreu um erro ao salvar o produto durante a conexão com o banco de dados.";
                RenderView("adicionar");
            }
        }

        public void Detalhes()
        {
            String idDiagnostico = Params["diagnostico"];
            if (idDiagnostico == null)
            {
                Flash["erro"] = "Ocorreu um erro no detalhamento do item, por favor tente mais tarde";
            }
            else
            {
                var diagnostico = DiagnosticoDAO.VisualizarDiagnostico(Convert.ToInt32(idDiagnostico));
                var pacientes = PacienteDto.BuscarPorNome("");
                String nome_paciente = null;
                foreach (var paciente in pacientes)
                {
                    if (paciente.Id == diagnostico.idProntuario)
                        nome_paciente = paciente.Nome;
                }
                if (String.IsNullOrEmpty(nome_paciente))
                    nome_paciente = Convert.ToString(diagnostico.idProntuario);

                var medicos = MedicoDTO.ListarMedicos();
                String nome_medico = null;
                foreach (var medico in medicos)
                {
                    if (medico.Id == Convert.ToInt32(diagnostico.idMedico))
                        nome_medico = medico.Nome;
                }

                if(String.IsNullOrEmpty(nome_medico))
                    nome_medico = diagnostico.idMedico;

                PropertyBag["diagnostico_nomePaciente"] = nome_paciente;
                PropertyBag["diagnostico_nomeMedico"] = nome_medico;
                PropertyBag["diagnostico_sintomas"] = diagnostico.sintomas;
                PropertyBag["diagnostico_queixas"] = diagnostico.queixas;
                PropertyBag["diagnostico_tratamento"] = diagnostico.tratamento;
            }
        }

        #endregion Actions
    }
}